package com.apolo.controle;

/**
 *
 * @author armando
 */
import java.util.List;

import com.apolo.entidades.Pessoa;
import com.apolo.entidades.Tarefa;
import com.apolo.repositorio.RepositorioPessoaLista;
import com.apolo.repositorio.RepositorioPessoaBDR;
import com.apolo.repositorio.RepositorioTarefa;
import com.apolo.sistema.excecoes.RepositorioException;

/**
 * @author armando
 *
 */
public class ManipulaPessoa {
    protected RepositorioPessoaLista meuRepositorioLista;
    protected RepositorioPessoaBDR meuRepositorioBDR;
    protected RepositorioTarefa meuRepositorioTarefa;
    
    /**No construtor ao instanciar a classe, a mesma ja inicia com um RepositorioPessoaLista  
     * @param rpl RepositorioPessoaLista
     * @see RepositorioPessoaLista
     */
    public ManipulaPessoa(RepositorioPessoaLista rpl){
        this.meuRepositorioLista = rpl;
    	this.meuRepositorioTarefa = new RepositorioTarefa();
    }
    
    public ManipulaPessoa(RepositorioPessoaBDR rpBDR){
    	this.meuRepositorioBDR = rpBDR;
    	this.meuRepositorioTarefa = new RepositorioTarefa();
    }
    
    
    /**
     * Inserir pessoa na lista
     * @param p Pessoa
     */
    public void inserir(Pessoa p){
        this.meuRepositorioLista.insere(p);
    }
    
    /**
     * Procurar pessoa na lista
     * @param codigo Codigo da pessoa
     * @return Pessoa Pessoa encontrada
     */
    public Pessoa procurar(int codigo){
        return(this.meuRepositorioLista.procura(codigo));
    }
    
    /**
     * Remover pessoa
     * @param codigo Codigo da pessoa 
     */
    public void remover(int codigo){
        this.meuRepositorioLista.deleta(codigo);
    }
    
    /**
     * 
     * @return A quantidade de pessoas do repositorio
     */
    public int quantidade(){
        return(this.meuRepositorioLista.size());
    }
    
    /**
     * Dado o indice da Pessoa no Repositorio de Pessoas, retorna a Pessoa correspondente
     * @param indice Posicao da Pessoa no Repositorio
     * @return Pessoa
     */
    public Pessoa pegaPessoa(int indice){
        return(this.meuRepositorioLista.pegaElementoDaLista(indice));
    }
    
    /**
     * Atualiza pessoa com os novos atributos
     * @param p Pessoa
     */
    public void atualizaPessoa(Pessoa p){
        this.meuRepositorioLista.atualiza(p);
    }
    
    /**
     * @return Lista de Pessoas
     * 
     */
    public List<Pessoa> getListaPessoas(){
    	return this.meuRepositorioLista.getListaPessoas();
    }
    
    /**
     * Inserir pessoa no banco de dados
     * @param p Pessoa
     */
    public void inserir(Pessoa p, RepositorioPessoaBDR rpBDR) throws RepositorioException{
    	this.meuRepositorioBDR.insere(p);
    }
   
    /**
     * Procurar pessoa no banco
     * @param codigo Codigo da pessoa
     * @return p Pessoa encontrada
     */
    public Pessoa procurar(int codigo, RepositorioPessoaBDR rpBDR) throws RepositorioException{
        return(this.meuRepositorioBDR.procura(codigo));
    }
    

    /**
     * Inserir tarefa em pessoa
     * @param p Pessoa
     */
    public void inserirTarefaPessoa(Tarefa t){
    	
    	this.meuRepositorioTarefa.insere(t);
    	
    }
    
    /**
     * Listar tarefas de pessoa
     * @param p Pessoa
     */
    public List<Tarefa> listarTarefas(){
    	
    	return(this.meuRepositorioTarefa.getListaTarefa());
    	
    }
    
    
}
